home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 21 / AACD 21.iso / AACD / Games / JST / sources / OSEmu / resources.s < prev    next >
Encoding:
Text File  |  2001-03-19  |  6.0 KB  |  313 lines

  1. ; value to initialize all counters (approx. timer based on Fire & Ice SFX timing)
  2.  
  3. CIA_COUNTER_INIT = $50
  4.  
  5. ; init-values of cia-interrupts
  6.  
  7. CIAA_INT_VAL=$F
  8. CIAB_INT_VAL=$3
  9.  
  10.  
  11. **************************************************************************
  12. *   RESOURCE FUNCTIONS                                                   *
  13. **************************************************************************
  14.  
  15. OPENRES        move.l    a2,-(a7)
  16.  
  17.         lea    _restable,a2
  18. .next        move.l    (a2)+,a0
  19.         move.l    a0,d0
  20.         beq    .err
  21.         bsr    _strcmp
  22.         beq.b    .found
  23.         addq.l    #4,a2
  24.         bra.b    .next
  25.  
  26. .found        move.l    (a2),a0
  27.         jsr    (a0)        ;init
  28.         
  29.         move.l    (a7)+,a2
  30.         rts
  31.  
  32. .err        pea    _LVOOpenResource
  33.         pea    _execname
  34.         bra    _emufail
  35.  
  36. **************************************************************************
  37. *   DISK.RESOURCE                                                        *
  38. **************************************************************************
  39.  
  40. DISKINIT    move.l    _diskbase,d0
  41.         beq    .init
  42.         rts
  43.  
  44. .init
  45.         move.l    #-_LVOReadUnitID,D0
  46.         move.l    #5*4,d1
  47.         lea    _diskname,a0
  48.         bsr    _InitStruct
  49.         move.l    d0,_diskbase
  50.         move.l    d0,a0
  51.  
  52.         ; patches
  53.  
  54.         patch    _LVOGetUnit(a0),GETUNIT
  55.         patch    _LVOGiveUnit(a0),MYRTS
  56.  
  57.         ; clears interrupt structure
  58.  
  59.         clr.l    (a0)+
  60.         clr.l    (a0)+
  61.         clr.l    (a0)+
  62.         clr.l    (a0)+
  63.         clr.l    (a0)
  64.  
  65.  
  66.         rts
  67.  
  68. GETUNIT:
  69.     moveq.l    #-1,d0        ; not exactly the thing to do but...
  70.     rts
  71.  
  72. **************************************************************************
  73. *   MISC.RESOURCE                                                        *
  74. **************************************************************************
  75.  
  76. MISCINIT    move.l    _miscbase,d0
  77.         beq    .init
  78.         rts
  79.  
  80. .init
  81.         move.l    #-_LVOFreeMiscResource,D0
  82.         move.l    #4,d1
  83.         lea    _miscname,a0
  84.         bsr    _InitStruct
  85.         move.l    d0,_miscbase
  86.         move.l    d0,a0
  87.  
  88.         ; patches
  89.  
  90.         patch    _LVOAllocMiscResource(a0),MYRTZ
  91.         patch    _LVOFreeMiscResource(a0),MYRTS
  92.  
  93.         rts
  94.  
  95.  
  96. **************************************************************************
  97. *   CIAA.RESOURCE                                                        *
  98. **************************************************************************
  99.  
  100. CIAAINIT    move.l    _ciaabase,d0
  101.         beq    .init
  102.         rts
  103.  
  104. .init        move.l    #-_LVOSetICR,d0
  105.         move.l    #44,d1
  106.         lea    _ciaaname(pc),a0
  107.         bsr    _InitStruct
  108.         move.l    d0,a0
  109.         move.l    d0,_ciaabase
  110.  
  111.         patch    _LVOAddICRVector(a0),CIAAADDICRV
  112.         patch    _LVORemICRVector(a0),CIAAREMICRV
  113.         patch    _LVOAbleICR(a0),_ABLEICR
  114.         patch    _LVOSetICR(a0),_SETICR
  115.  
  116.         move.l    #$BFE001,34(a0)    ; cia base
  117.         clr.l    40(A0)        ; JOTD v1.15
  118.         move.b    #CIAA_INT_VAL,41(A0)
  119.         move.w    #INTF_PORTS,38(A0)
  120.  
  121.         clr.l    (a0)+
  122.         clr.l    (a0)+
  123.         clr.l    (a0)+
  124.         move.l    #INTSERVNODE_SP,(a0)+
  125.         clr.l    (a0)
  126.  
  127.         MOVE.B    #CIA_COUNTER_INIT,$BFE701    ; initializes CIA-B timer TBHI
  128.         MOVE.B    #CIA_COUNTER_INIT,$BFE501    ; initializes CIA-B timer TAHI
  129.  
  130.         rts
  131.  
  132. CIAAADDICRV    move.l    #$80,d1
  133.         bset    d0,d1
  134.         move.b    d1,$bfed01
  135.         bra.s    ADDICRV
  136.  
  137. CIABADDICRV
  138.         move.l    #$80,d1
  139.         bset    d0,d1
  140.         move.b    d1,$bfdd00
  141.  
  142.  
  143. ADDICRV        lsl.w    #2,d0
  144.         move.l    (a6,d0.w),d1
  145.         bne    .1
  146.         move.l    a1,(a6,d0.w)
  147. .1        move.l    d1,d0
  148.         rts
  149. CIAAREMICRV    moveq.l    #0,d1
  150.         bset    d0,d1
  151.         move.b    d1,$bfed01
  152.         bra.s    REMICRV
  153.  
  154. CIABREMICRV    moveq.l    #0,d1
  155.         bset    d0,d1
  156.         move.b    d1,$bfdd00
  157.  
  158. REMICRV        lsl.w    #2,d0
  159.         cmp.l    (a6,d0.w),a1
  160.         bne    .1
  161.         clr.l    (a6,d0.w)
  162. .1        rts
  163.  
  164.  
  165. INT_CIAB    move.l    _ciabbase,a6
  166.         MOVE.B    $BFDD00,D0
  167.         bra.s    INT_CIA
  168.  
  169.  
  170. INT_CIAA    move.l    _ciaabase,a6
  171.         MOVE.B    $BFED01,D0
  172. INT_CIA
  173.         bclr    #7,42(A6)    ;Harry: generate additional
  174.         beq.s    .chk        ;interrupt evoked by 
  175.         or.b    42(A6),d0    ;SetICR
  176.  
  177. .chk        Bclr    #0,D0
  178.         BNE.S    .ta
  179.         Bclr    #1,D0
  180.         BNE.S    .tb
  181.         Bclr    #2,D0
  182.         BNE.S    .alarm
  183.         Bclr    #3,D0
  184.         BNE.S    .sp
  185.         Bclr    #4,D0
  186.         BNE.S    .flag
  187.         RTS
  188.  
  189. .ta        MOVE.L    (A6),A0
  190.         BRA.S    .IN
  191. .tb        MOVE.L    (4,A6),A0
  192.         BRA.S    .IN
  193. .alarm        MOVE.L    (8,A6),A0
  194.         BRA.S    .IN
  195. .sp        MOVE.L    (12,A6),A0
  196.         BRA.S    .IN
  197. .flag        MOVE.L    (16,A6),A0
  198.  
  199. .IN        move.l    a0,d1
  200.         beq    .chk
  201.         MOVE.L    (IS_DATA,A0),A1
  202.         MOVE.L    (IS_CODE,A0),A0
  203.         movem.l    d0/a6,-(a7)
  204.         Jsr    (A0)
  205.         movem.l    (a7)+,d0/a6
  206.         bra    .chk
  207.  
  208. ; SetICR, added by JOTD
  209. ; < A6: base (A or B)
  210. ; < D0: new mask
  211. ; > D0: old mask
  212.  
  213. _SETICR
  214.     btst    #7,d0            ;ignore    deleted int-requests
  215.     beq.s    .1
  216.     MOVE    #$4000,$DFF09A
  217.  
  218.     move.b    d0,42(A6)        ;set additional int-request (harry)
  219.  
  220.     move.l    D0,A1            ; save new ICR value
  221.  
  222.     move.b    41(A6),D1        ; save old ICR
  223.     
  224.     MOVEA.L    34(A6),A0        ; cia base
  225.     MOVE.B    $D00(A0),D0        ; ICR
  226.     BCLR    #7,D0            ; remove bit 7
  227.     OR.B    D0,41(A6)        ; ICR updated in lib memory
  228.     move.l    A1,D0            ; restore D0
  229.     
  230.     move.b    D0,$D00(A0)        ; sets hardware ICR
  231.     exg    D1,D0            ; D1 in D0 (old value)
  232.  
  233.     MOVE    #$C000,$DFF09A
  234. .1:
  235.     rts
  236.  
  237.  
  238.     ; harry's version is not system-accurate, but with the system ripped (above)
  239.     ; version, Fire & Ice music is still slow!!! I added the move.b D0,42(a6)
  240.     ; to the original routine and it works
  241.     ; harry's version crashes on some games whereas system ripped version works.
  242.  
  243.     IFD    HARRYVER
  244. _SETICR
  245.     btst    #7,d0            ;ignore    deleted int-requests
  246.     beq.s    .1
  247.     move.b    d0,42(A6)        ;set additional int-request
  248.     move.w    38(A6),d1
  249.     or.w    #$8000,d1
  250.     move.w    d1,$dff09c
  251. .1        
  252.     MOVEQ.L    #0,D0            ;returncode: no int-requests
  253.                     ;waiting for evoke
  254.     RTS
  255.     ENDC
  256.  
  257. _ABLEICR:
  258.     MOVE    #$4000,$DFF09A
  259.  
  260.     ; partly set icr code
  261.  
  262.     MOVEA.L    34(A6),A0        ; cia base
  263.     MOVE.B    $D00(A0),D1        ; ICR
  264.     BCLR    #7,D1            ; remove bit 7
  265.     OR.B    D1,41(A6)        ; add to already exising bits
  266.  
  267.     MOVEQ    #0,D1            ;20: 7200
  268.     MOVE.B    41(A6),D1        ;22: 122E0029
  269.     OR.B    43(A6),D1        ;26: offset 132 originally
  270.     TST.B    D0            ;2A: 4A00
  271.     BEQ.S    .LAB_0001        ;2C: 6716
  272.     BCLR    #7,D0            ;2E: 08800007
  273.     BNE.S    .LAB_0000        ;32: 660C
  274.     NOT.B    D0            ;34: 4600
  275.     AND.B    D0,41(A6)        ;36: C12E0029
  276.     AND.B    D0,43(A6)        ;3A: offset 132 originally
  277.     BRA.S    .LAB_0001        ;3E: 6004
  278. .LAB_0000:
  279.     OR.B    D0,41(A6)        ;40: 812E0029
  280. .LAB_0001:
  281.     MOVE.B    40(A6),D0        ;44: 102E0028
  282.     AND.B    41(A6),D0        ;48: C02E0029
  283.     BEQ.S    .LAB_0002        ;4C: 670E
  284.     MOVE    38(A6),D0        ;4E: 302E0026
  285.     OR    #$8000,D0        ;52: 807C8000
  286.     MOVE    D0,$DFF09C
  287. .LAB_0002:
  288.  
  289.     MOVE    #$C000,$DFF09A
  290. .LAB_0003:
  291.     MOVE.L    D1,D0            ;6E: 2001
  292.     RTS                ;70: 4E75
  293.  
  294.  
  295.  
  296. INTSERVNODE_CIAA
  297.         dc.l    0        ;LN_SUCC
  298.         dc.l    0        ;LN_PRED
  299.         dc.b    NT_INTERRUPT    ;LN_TYPE
  300.         dc.b    120        ;LN_PRI
  301.         dc.l    _ciaaname    ;LN_NAME
  302.         dc.l    0        ;IS_DATA
  303.         dc.l    INT_CIAA    ;IS_CODE
  304.  
  305. INTSERVNODE_CIAB
  306.         dc.l    0        ;LN_SUCC
  307.         dc.l    0        ;LN_PRED
  308.         dc.b    NT_INTERRUPT    ;LN_TYPE
  309.         dc.b    120        ;LN_PRI
  310.         dc.l    _ciabname    ;LN_NAME
  311.         dc.l    0        ;IS_DATA
  312.         dc.l    INT_CIAB    ;IS_CODE
  313.